1 package uba.db.sql.server;
2
3 import java.io.BufferedReader;
4 import java.io.InputStreamReader;
5 import java.io.PrintWriter;
6 import java.net.InetSocketAddress;
7 import java.net.Socket;
8
9 import uba.db.testhelpers.TestUtils;
10
11 import junit.framework.TestCase;
12
13 /***
14 * Test de unidad para {@link Server}.
15 *
16 * @version $Revision: 1.1 $
17 */
18 public class ServerTest extends TestCase {
19 private Server server;
20 private static final String TEST_SERVER_HOST = "localhost";
21 private static final int TEST_SERVER_PORT = 5000;
22
23 /***
24 * @see junit.framework.TestCase#setUp()
25 */
26 protected void setUp() throws Exception {
27 super.setUp();
28 server = new Server(new InetSocketAddress(TEST_SERVER_HOST, TEST_SERVER_PORT),
29 TestUtils.tempDirectory());
30 }
31
32 /***
33 * @see junit.framework.TestCase#tearDown()
34 */
35 protected void tearDown() throws Exception {
36 if (server.isRunning()) {
37 server.stop();
38 }
39 }
40
41 /***
42 * Test: iniciar el servidor y verificar si el mismo esta corriendo
43 */
44 public void testStart() throws ServerAlreadyRunningException {
45 try {
46 server.start();
47 } catch (ServerStartUpException e) {
48 fail("no se pudo iniciar el servidor");
49 }
50
51 assertTrue("el server deberia estar en ejecución", server.isRunning());
52 }
53
54 /***
55 * Test: conectarse al servidor desde un cliente
56 */
57 public void testConnectFromClient() throws Exception {
58 Socket clientSocket = null;
59
60 server.start();
61
62 try {
63 clientSocket = new Socket(TEST_SERVER_HOST, TEST_SERVER_PORT);
64 } catch (Exception e) {
65 fail("fallo la conexion al servidor");
66 }
67 assertTrue(clientSocket.isConnected());
68 clientSocket.close();
69 assertTrue("el server deberia seguir en ejecución", server.isRunning());
70 }
71
72 /***
73 * Test: cuando el server no esta en ejecución {@link Server#isRunning} debe
74 * ser <i>false</i>.
75 */
76 public void testIsRunning() throws Exception {
77 assertFalse(server.isRunning());
78 }
79
80 /***
81 * Test: espera que el server termine (quizas la mejor forma es utilizar un
82 * observer sobre el server y no esperar una notificacion al monitor del
83 * objeto, por ahora con la notificacion alcanza).
84 */
85 public void testServerFinalizationNotification() throws Exception {
86 server.start();
87 new Thread(new Runnable() {
88 public void run() {
89 try {
90
91 Thread.sleep(200);
92
93 server.stop();
94 } catch (Exception e) {
95
96
97 }
98 }
99 }).start();
100
101 synchronized (server) {
102 server.wait(1000);
103 }
104
105 assertFalse("paso el tiempo de espera y no se notifico el cambio en el server",
106 server.isRunning());
107 }
108
109 /***
110 * Test: al ejecutar un SELECT se debe retornar algun resultado.
111 */
112 public void testExecuteSelect() throws Exception {
113 server.start();
114 Socket clientSocket = new Socket(TEST_SERVER_HOST, TEST_SERVER_PORT);
115 PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
116 BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket
117 .getInputStream()));
118
119 out.println("SELECT * FROM sys_tables");
120 String oneResult = in.readLine();
121 assertNotNull(oneResult);
122 }
123
124 }